#include <iostream>
#include <signal.h>
#include <unistd.h>
// void handler(int signo)
// {
//     std::cout << "get a signo:" << signo << std::endl;
// }

// int main()
// {
//     signal(2,handler);//设置收到2号信号的时候的处理方式为handler
//     int cnt = 10;
//     while(true)
//     {
//         if(cnt-- <= 5)
//         {
//             kill(getpid(),2);//给当前进程发送2号信号
//         }
//         if(!cnt)
//         {
//             std::cout << "receive signo : 8 , process exit" << std::endl;
//             kill(getpid(),8);//给当前进程发送8号信号
//         }
//         std::cout << "Hello,World,cnt:" << cnt << std::endl;
//         sleep(1);
//     }
//     return 0;
// }

// void handler(int signo)
// {
//     std::cout << "get a signo : " << signo << " pid:" << getpid() << std::endl;
// }

// int main()
// {
//     signal(SIGINT, handler);
//     std::cout << "pid:" << getpid() << std::endl;
//     while (true)
//         ;
//     return 0;
// }

// int main()
// {
//     signal(SIGALRM, handler);
//     alarm(10);
//     int cnt = 0;
//     pid_t id = fork();
//     if (id == 0)
//     {
//         while (true)
//         {
//             if (cnt == 20)
//             {
//                 exit(0);
//             }
//             std::cout << "I am child,pid: " << getpid() << "cnt:" << cnt++ << std::endl;
//             sleep(1);
//         }
//     }
//     return 0;
// }

// void handler(int signo)
// {
//     std::cout << "get a alarm signal" << std::endl;
//     alarm(2);//每过两秒发送一次SIGALRM信号
// }

// int main()
// {
//     signal(SIGALRM, handler);
//     alarm(5);
//     int cnt = 0;
//     while (true)
//     {
//         std::cout << "process running..." << std::endl;
//         sleep(1);
//     }
//     return 0;
// }
void handler(int signo)
{
    std::cout << "get a signal : " << signo << std::endl;
    exit(0);
}
void PrintBlock(sigset_t s)
{
    for (int i = 31; i > 0; --i)
    {
        if (sigismember(&s, i))
        {
            std::cout << "1";
        }
        else
        {
            std::cout << "0";
        }
    }
    std::cout << std::endl;
}

int main()
{
    sigset_t s;
    sigfillset(&s);
    sigprocmask(SIG_BLOCK,&s,nullptr);
    sigprocmask(SIG_BLOCK,nullptr,nullptr);
    sigprocmask(SIG_BLOCK,nullptr,&s);
    PrintBlock(s);
    return 0;
}